// 监听安装事件
chrome.runtime.onInstalled.addListener(function () {
  console.log('自动填写地址插件已安装');

  // 初始化存储
  chrome.storage.sync.get(['addresses'], function (result) {
    if (!result.addresses) {
      // 添加一条默认的测试地址数据
      const defaultAddress = {
        id: 'default-' + Date.now(),
        name: '默认测试地址',
        receiver: '张三1',
        phone: '13800138000',
        province: '北京',
        city: '直辖市',
        district: '朝阳区',
        street: '八里庄街道',
        detailAddress: '测试街道123号测试小区1单元101室',
        postcode: '100010',
        fullAddress: '北京市北京市东城区测试街道123号测试小区1单元101室'
      };

      // 清除所有现有地址并添加默认地址
      chrome.storage.sync.set({ addresses: [defaultAddress] });
      console.log('已添加默认测试地址:', defaultAddress);
    }
  });
});

// 添加一个用于重置地址的消息处理
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
  if (request.action === 'resetAddresses') {
    // 添加一条默认的测试地址数据
    const defaultAddress = {
      id: 'default-' + Date.now(),
      name: '默认测试地址',
      receiver: '张三1',
      phone: '13800138000',
      province: '北京',
      city: '直辖市',
      district: '朝阳区',
      street: '八里庄街道',
      detailAddress: '测试街道123号测试小区1单元101室',
      postcode: '100010',
      fullAddress: '北京市北京市东城区测试街道123号测试小区1单元101室'
    };

    // 清除所有现有地址并添加默认地址
    chrome.storage.sync.set({ addresses: [defaultAddress] }, function () {
      sendResponse({ success: true, message: '地址已重置' });
    });
    return true; // 异步响应
  }
});

// 监听来自popup或content script的消息
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
  // 处理来自popup的消息
  if (request.action === 'getAddresses') {
    chrome.storage.sync.get(['addresses'], function (result) {
      sendResponse({ addresses: result.addresses || [] });
    });
    return true; // 异步响应
  }

  // 处理来自content script的消息
  if (request.action === 'notifyAddressFilled') {
    // 可以在这里记录日志或执行其他操作
    console.log('地址已填写:', request.success);
    sendResponse({ received: true });
  }

  // 处理来自content script的调试日志消息
  if (request.action === 'contentDebugLog') {
    // 在background.js中输出日志，这样可以在devtools中查看
    const logPrefix = `[Content Script] ${request.message}`;

    // 根据日志类型使用不同的console方法
    switch (request.logType) {
      case 'error':
        console.error(logPrefix, request.data);
        break;
      case 'warning':
        console.warn(logPrefix, request.data);
        break;
      case 'success':
        console.log('%c' + logPrefix, 'color: green; font-weight: bold', request.data);
        break;
      case 'detail':
        console.log('%c' + logPrefix, 'color: purple; font-style: italic', request.data);
        break;
      case 'info':
      default:
        console.log('%c' + logPrefix, 'color: blue', request.data);
        break;
    }

    sendResponse({ received: true });
  }
});

// 监听标签页更新事件，检测是否为订单页面
chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
  if (changeInfo.status === 'complete' && tab.url) {
    // 检查URL是否包含常见的订单或结算关键词
    const orderKeywords = [
      'checkout', 'order', 'cart', 'basket', 'shipping', 'delivery', 'address',
      '结算', '订单', '购物车', '收货', '配送', '地址'
    ];

    const isOrderPage = orderKeywords.some(keyword =>
      tab.url.toLowerCase().includes(keyword)
    );

    if (isOrderPage) {
      // 向content script发送消息，通知可能是订单页面
      chrome.tabs.sendMessage(tabId, { action: 'detectOrderPage' }, function (response) {
        // 忽略错误，因为content script可能尚未加载
        if (chrome.runtime.lastError) {
          return;
        }

        if (response && response.isOrderPage) {
          // 可以在这里执行其他操作，例如显示通知
          chrome.action.setBadgeText({ text: '订单', tabId: tabId });
          chrome.action.setBadgeBackgroundColor({ color: '#4285F4', tabId: tabId });
        }
      });
    } else {
      // 清除徽章
      chrome.action.setBadgeText({ text: '', tabId: tabId });
    }
  }
});